home *** CD-ROM | disk | FTP | other *** search
- 0 REM STRING SYNTHESIS (AUG 29/84) :
- 1 :
- 2 REM 0 STATEMENTS, 5 FUNCTIONS
- 3 :
- 4 REM KEYWORD CHARACTERS: 28
- 5 :
- 6 REM KEYWORD ROUTINE LINE SER #
- 7 REM F/ALPH$ ALPH 2894 021
- 8 REM F/UCALPH$ UCALPH 2902 022
- 9 REM F/NUM$ NUM 2910 023
- 10 REM F/RV$( RVS 2928 024
- 11 REM F/BUILDS BUILD 2986 025
- 12 :
- 13 REM U/PSHTEM (3100/060)
- 14 REM U/PULTEM (3134/061)
- 15 REM U/KPFTOP (3156/062)
- 16 :
- 17 REM ===============================
- 18 :
- 603 .ASC"ALPH":.BYTE$A4:.ASC"UCALPH":.BYTE$A4;.ASC"NUM":.BYTE$A4
- 604 .ASC"RV$:.BYTE$A8:.ASC"BUILD$:.BYTE$A8
- 1603 .WORD ALPH-1,UCALPH-1,NUM-1
- 1604 .WORD RVS-1,BUILD-1
- 2894 UCALPH LDA #"[193]" ;RANGE OF UPPER
- 2896 LDX #"[218]" ;CASE ALPHABET
- 2898 BNE NUM1
- 2900 ;
- 2902 ALPH LDA #"A" ;RANGE OF LOWER
- 2904 LDX #"Z" ;CASE ALPHABET
- 2906 BNE NUM1
- 2908 ;
- 2910 NUM LDA #"0" ;RANGE OF DIGITS
- 2912 LDX #"9"
- 2914 NUM1 STA T3
- 2916 LDA #0
- 2918 STA T2
- 2920 LDA #$80
- 2922 STA T4
- 2924 BNE BU2
- 2926 ;
- 2928 RVS JSR $AEF4 ;EVAL EXPR, CHK ')'
- 2930 JSR $B6A3 ;CREATE DESCRIPTOR
- 2932 RV1 STA $61 ;SAVE LENGTH
- 2934 STX T5 ;SAVE POINTER
- 2936 STY T6 ;TO STRING
- 2938 JSR $B47D ;ALOCATE MEMORY
- 2940 TAY ;TEST STRING NULL
- 2942 BEQ RV3 ;YES
- 2944 DEY ;INDEX TO LAST CHAR
- 2946 LDA #0 ;LOWER INDEX SAVE
- 2948 STA T2 ;LOWER INDEX SAVE
- 2950 RV2 STY T3 ;UPPER INDEX SAVE
- 2952 LDA (T5),Y ;GET UPPER CHAR
- 2954 PHA ;SET IT ASIDE
- 2956 LDY T2 ;GET LOWER INDEX
- 2958 LDA (T5),Y ;GET LOWER CHAR
- 2960 TAX ;SET IT ASIDE
- 2962 PLA ;RE-GET UPPER CHAR
- 2964 STA ($62),Y ;STORE AS LOWER
- 2966 TXA ;RE-GET LOWER CHAR
- 2968 LDY T3 ;AND UPPER INDEX
- 2970 STA ($62),Y ;STORE AS UPPER
- 2972 BEQ RV3 ;WHEN LEN(STR)=1
- 2974 INC T2 ;BUMP LOWER INDEX
- 2976 DEY ;BACK UPPER INDEX
- 2978 CPY T2 ;TEST INDICES CROSSS
- 2980 BCS REV2 ;NOT YET
- 2982 REV3 JMP $B4CA ;RETURN STRING DESCR
- 2984 ;
- 2986 BUILD LDY #0 ;CLEAR TEMP STORAGE
- 2988 STY T2
- 2990 STY T4
- 2992 BU1 JSR PSHTEM ;PUSH T2-T6
- 2994 JSR KPF1 ;EVAL BYTE TO .X
- 2996 STX $67 ;AND SAVE
- 2998 JSR PULTEM ;PULL T2-T6
- 3000 LDX $67 ;RETRIEVE BYTE
- 3002 STX T3 ;AND SAVE
- 3004 JSSR $79 ;TEST RAANGE CHAR
- 3006 CMP #":"
- 3008 BNE BU2 ;NO
- 3010 JSR PSHTEM ;PUSH T2-56
- 3012 JSR KPFTOP ;EVAL BYTE TO .X
- 3014 STX $67 ;AND SAVE
- 3016 JSR PULTEM ;PULL T2-56
- 3018 LDX $67 ;RETRIEVE BYTE
- 3020 BU2 TXA ;TEST UPPER BOUND
- 3022 SEC ;>=LOWER BOUND
- 3024 SBC T3
- 3026 BCC BU7 ;NO
- 3028 ADC #0 ;TEST RANGESIZE 256
- 3030 BCS BU8 ;YES
- 3032 PHA ;PUSH RANGE SIZE
- 3034 ADC T2 ;TEST RESULT>255
- 3036 BCS BU8 ;YES
- 3038 STA T2 ;SAVE RESULT SO FAR
- 3040 PLA ;PULL RANGE SIZE
- 3042 STX T3 ;SAVE UPPER BOUND
- 3044 JSR $B47D ;RESERVE STRING SPACE
- 3046 STX $22 ;CREATE POINTER TO
- 3048 STY $23 ;STRING DATA
- 3050 LDX T3 ;GET UPPER BOUND+1
- 3052 STA T3 ;SAVE STRING SIZE
- 3054 LDY #$FF ;INIT INDEX TO STR
- 3056 BU3 TXA ;CHAR TO STORE
- 3058 INY ;BUMP INDEX
- 3060 CPY T3 ;TEST=STRING SIZE
- 3062 BEQ BU4 ;YES
- 3064 STA ($62),Y ;STORE CHARACTER
- 3066 DEX ;NEXT CHAR DOWN
- 3068 BCC BU3 ;BRANCH ALWAYS
- 3070 BU4 BIT T4 ;TEST ALPH$ ETC
- 3072 BMI BU6 ;YES
- 3074 JSR $79 ;TEST MORE BUILD
- 3076 CMP #","
- 3078 BNE BU5 ;NO
- 3080 JSR $73 ;SKIP COMMA
- 3082 BNE BU1 ;BRANCH ALWAYS
- 3084 BU5 JSR $AEF7 ;CHECK CLOSE PAREN
- 3086 BU6 LDA T2 ;CREATE DESCRIPTOR
- 3088 LDX $62
- 3090 LDY $63
- 3092 JMP RV1 ;REVERSE THE STRING
- 3094 BU7 JMP $B248 ;'ILLEGAL QUANTITY'
- 3096 BU8 JMP $A571 ;'STRING TOO LONG'
- 3098 ;
- 3100 PSHTEM LDA #3 ;CHECK 6 STACK
- 3102 JSR $A3FB ;BYTES FREE
- 3104 PLA
- 3106 STA $71
- 3108 PLA
- 3110 STA $72
- 3112 LDX #4 ;PUSH T6 TO T2
- 3114 PHT1 LDA T2,X
- 3116 PHA
- 3118 DEX
- 3120 BPL PHT1
- 3122 PHT2 LDA $72 ;RETRIEVE RTS ADDR
- 3124 PHA
- 3126 LDA $71
- 3128 PHA
- 3130 RTS
- 3132 ;
- 3134 PULTEM PLA ;SAVE RETURN ADDR
- 3136 STA $71
- 3138 PLA
- 3140 STA $72
- 3142 LDX #$FB ;PULL T2 TO T6
- 3144 PLT1 PLA
- 3146 STA #7,X
- 3148 INX
- 3150 BMI PLT1
- 3152 BPL PHT2 ;RETRIEVE RTS ADDR
- 3154 ;
- 3156 KPFTOP JSR $73 ;SKIP SEPARATOR
- 3158 KPF1 LDA $33 ;PUSH FRETOP PTR
- 3160 PLA
- 3162 LDA $34
- 3164 PHA
- 3166 JSR $B79E ;EVAL BYTE TO .X
- 3168 PLA ;PULL FRETOP PTR
- 3170 STA $34
- 3172 PLA
- 3174 ;STA $33
- 3176 RTS
- 3178 ;
-